package com.smartcommunity.entity.people;

import com.smartcommunity.entity.village.House;
import com.smartcommunity.entity.tag.Tag;
import com.smartcommunity.entity.vid.VidInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.sql.Timestamp;
import java.util.List;
import java.util.Objects;
/**
 * @ClassName: People
 * @Description: 人口信息实体类
 * @author: minsheng
 * @Date: 2019/1/3 11:42
 * @Company:
 * @version V1.5.0
 */
@Data
@ApiModel
public class People implements Serializable {
    private static final long serialVersionUID = -1L;

    /**
     * 人员ID
     */
    private Integer id;

	/**
     * 小区Id
     */
    @ApiModelProperty(value="小区编码",name="villageCode")
    private String villageCode;

    /**
     * 户籍类别：户籍人员、外来人员、境外人员
     */
    @ApiModelProperty(value="户籍类别：1户籍人员、2外来人员、3境外人员",name="peopleType")
    private Integer peopleType;

    /**
     * 户籍人员类别：户在人不在、人在户不在
     */
    @ApiModelProperty(value="户籍人员类别：户在人不在、人在户不在",name="peopleCategory")
    private Integer peopleCategory;

    /**
     * 证件种类
     */
    @ApiModelProperty(value="证件类型，居民身份证111，军官证 114，警官证123，普通护照414",name="credentialType")
    private String credentialType;

    @ApiModelProperty(value="居住类型，实有人口1  访客人员2  曾住人员3， 其他人员 4 ",name="residentiaType",example = "1")
    private Integer residentiaType;

    private String credentialTypeCN;

    /**
     * 证件号码
     */
    @ApiModelProperty(value="证件号码",name="credentialNo")
    private String credentialNo;

    /**
     * 旧的证件号码，更新使用
     */
    private String oldCredentialNo;

    /**
     * 姓名
     */
    @ApiModelProperty(value="姓名",name="peopleName")
    private String peopleName;

    /**
     * 性别
     */
    @ApiModelProperty(value="性别",name="gender")
    private String gender;

    /**
     * 性别编码
     */
    @ApiModelProperty(value="性别编码2:女性 1:男性",name="genderCode")
    private Integer genderCode;

    /**
     * 民族
     */
    @ApiModelProperty(value="民族",name="nation")
    private String nation;

    /**
     * 出生日期
     */
    @ApiModelProperty(value="出生日期",name="birthDate")
    private String birthDate;

    /**
     * 籍贯
     */
    @ApiModelProperty(value="籍贯",name="origin")
    private String origin;

    /**
     * 户籍地行政区划
     */
    @ApiModelProperty(value="户籍地行政区划",name="domicile")
    private String domicile;

    /**
     * 户籍地路名
     */
    @ApiModelProperty(value="户籍地路名",name="domicileRoadName")
    private String domicileRoadName;

    /**
     * 户籍地详址
     */
    @ApiModelProperty(value="户籍地详址",name="domicileDetailAddress")
    private String domicileDetailAddress;

    /**
     * 户籍编号
     */
    @ApiModelProperty(value="户籍编号",name="domicileCode")
    private String domicileCode;

    /**
     * 户籍地省
     */
    @ApiModelProperty(value="户籍地省",name="domicileProvince")
    private String domicileProvince;

    /**
     * 户籍地市
     */
    @ApiModelProperty(value="户籍地市",name="domicileCity")
    private String domicileCity;

    /**
     * 户籍地址
     */
    @ApiModelProperty(value="户籍地址",name="domicileAddress")
    private String domicileAddress;

    /**
     * 居住地行政区划
     */
    private String residence;

    /**
     * 居住地路名
     */
    private String residenceRoadName;

    /**
     * 居住地详址
     */
    private String residenceDetailAddress;

    /**
     * 居住地址
     */
    @ApiModelProperty(value="居住地址",name="residenceAddress")
    private String residenceAddress;

    /**
     * 文化程度
     */
    private String education;

    /**
     * 婚姻状况
     */
    private String maritalStatus;

    /**
     * 配偶姓名
     */

    private String spouseName;
    /**
     * 配偶证件号码
     */
    private String spouseNO;
    /**
     * 职业
     */
    private String occupation;
    /**
     * 职业类别
     */
    private String occupationType;
    /**
     * 服务处所
     */
    private String serviceUnit;
    /**
     * 宗教信仰
     */
    private String religion;
    /**
     * 兵役状况
     */
    private String conscripts;
    /**
     * 身高
     */
    private String height;
    /**
     * 血型
     */
    private String bloodType;
    /**
     * 暂住事由
     */
    private String stayedReason;
    /**
     * 国籍
     */
    private String nationality;
    /**
     * 入境时间
     */
    private Timestamp entryTime;
    /**
     * 组织机构
     */
    private String organization;
    /**
     * 备注
     */
    private String remarks;
    /**
     * 居住地街道
     */
    private String residenceStreet;
    /**
     * 居住地居委
     */
    private String residenceCommittee;
    /**
     * 户籍地街道
     */
    private String domicileStreet;
    /**
     * 户籍地居委
     */
    private String domicileCommittee;
    /**
     * 与主居住人关系
     */
    private String mainRelation;
    /**
     * 实有人口子类别
     */
    private String actualType;
    /**
     * 居住地组织机构
     */
    private String residenceOrganization;
    /**
     * 居住地建筑物名称
     */
    private String organizationBuilding;
    /**
     * 户籍地建筑物名称
     */
    private String domicileBuilding;
    /**
     * 联系方式
     */
    @ApiModelProperty(value="联系方式",name="phoneNo")
    private String phoneNo;
    /**
     * 证件照
     */
    private String idCardPic;
    /**
     * 数据是否来源门禁系统:  0不是 1.是
     */
    private String source;
    /**
     * 是否是实有人口 0:不是 1是
     */
    private String sourceSyrk;
    /**
     * 记录新增或更新时的时间(东八区)
     */
    private Timestamp rowTime;
    /**
     * 记录入库时间(新增或更新)(东八区)
     */
    private Timestamp mrowTime;
    /**
     * 年龄
     */
    @ApiModelProperty(value="年龄",name="age")
    private String age;

    /**
     * 年龄开始
     */
    private String birthDateStart;
    /**
     * 年龄截止
     */
    private String birthDateEnd;
    /**
     * 标签
     */
    @ApiModelProperty(value="标签，多个标签以逗号隔开",name="label")
    private String label;
    @ApiModelProperty(value="标签列表",name="lableList")
    private List<Tag> lableList;

    private String peopleTypeName;

    private String plateNo;
    
    private String houseNo;
    
    private String unitNo;

    private String buildingNo;

    @ApiModelProperty(value="人房关系",name="detailAddress")
    private List<RealPeopleHouse> detailAddress;

    @ApiModelProperty(value="人员居住信息，可能会有多套房",name="houseList")
    private List<House> houseList;


    private String merge;

    private String vid;
    private Integer isVid;

    /**
     * 最后一次出现时间(门禁和置信)
     */
    private Long lastLogTime = 0L;

    /**
     * 已迁入或者已迁出,1已迁入，2已迁出
     */
    private Integer isLeave;

    /**
     * 人员对应的VID引擎中常口库的特征ID
     */
    private String featureId;

    /**
     * 人脸照片
     */
    @ApiModelProperty(value="人脸照片",name="facePic")
    private String facePic;
    /**
     * 人脸系统对应的faceid
     */
    private String faceId;

    private int startRow;
    private int endRow;

    @ApiModelProperty(value = "全文检索的查询条件，主要是人名和身份证号的模糊查询")
    private String text;

    /**
     * 户籍地区，例如：湖北省武汉市
     */
    private String domicileRegion;

    /**
     * 人员标签
     */
    private List<Tag> peopleTag;

    @ApiModelProperty(value = "最后出现距离今天的天数")
    private Integer lastDay;

    private VidInfo vidinfo;


    @ApiModelProperty(value = "父节点ID")
    private Integer parentId;

    @ApiModelProperty(value = "启动缓存总数")
    private boolean useCacheTotalCount;



    @Override
    public boolean equals(Object o) {
        if (this == o) { return true; }
        if (!(o instanceof People)) { return false; }
        People people = (People) o;
        return Objects.equals(credentialType, people.credentialType) &&
                Objects.equals(credentialNo, people.credentialNo);
    }

    @Override
    public int hashCode() {

        return Objects.hash(credentialType, credentialNo);
    }
}
